/**
 * Joint.cpp
 * Coyright (c) 2009 Xiaofeng Gu. All Rights Reserved.
 * Author : Xiaofeng Gu
 *
 * Creation Data : 2009/06/11
 */

#include "stdafx.h"
#include "Joint.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif



///////////////////////////////////////////////////////
/// class CJoint
///////////////////////////////////////////////////////
CJoint::CJoint()
{
}

CJoint::CJoint(double x1, double y1, double z1)
: x(x1),
  y(y1),
  z(z1)
{
}

CJoint::~CJoint()
{
}

double CJoint::operator[](unsigned int i) const
{
	return *(&x + i);
}

void CJoint::operator=(const CJoint& obj)
{
	x = obj[0];
	y = obj[1];
	z = obj[2];
}

CVec CJoint::operator-(const CJoint& obj)
{
	CVec temp(
		(*this)[0] - obj[0],
		(*this)[1] - obj[1],
		(*this)[2] - obj[2]);
	return temp;
}

CJoint CJoint::operator+(const CVec& obj)
{
	CJoint temp(
		x + obj[0],
		y + obj[1],
		z + obj[2]);
	return temp;
}

void CJoint::operator+=(const CVec& obj)
{
	x = x + obj[0];
	y = y + obj[1];
	z = z + obj[2];
}

bool CJoint::OnRead(CXMLParser* pParser)
{
	if (pParser->FindChildNode(NODE_JOINT))
	{
	m_eType = (JointType)pParser->GetType();
		if (pParser->FindChildNode(NODE_X, x))
		{
			pParser->FindXMLNode(NODE_Y, y);
			pParser->FindXMLNode(NODE_Z, z);
		pParser->EndXMLNode();
		}
	pParser->EndXMLNode();
	}

	return true;
}

bool CJoint::OnWrite(CXMLParser* pParser)
{
	pParser->AddChildNode(NODE_JOINT);
	pParser->AddType((int)m_eType);
		pParser->AddChildNode(NODE_X, x);
		pParser->AddXMLNode(NODE_Y, y);
		pParser->AddXMLNode(NODE_Z, z);
		pParser->EndXMLNode();
	pParser->EndXMLNode();

	return true;
}
